#ifndef BONUSEQUIPEMENT_HPP
#define BONUSEQUIPEMENT_HPP

#include "XmlInfo/XmlInfoCaracteristiques.hpp"

/** Namespace qui évite d'utiliser directement la classe BonusEquipement.
  */
namespace Invisible
{
/** Classe qui permet de gérer les bonus potentiels dus à un équipement.
  *
  * La classe contient la caractéristique augmentée ainsi que le bonus
  * appliqué.
  *
  * La classe est "cachée" dans le namespace Invisible pour éviter de l'utiliser
  * directement, son usage est sensé être limité au traitement interne de
  * \c CalculateurReussite.
  *
  * @author Johan "Solo" Luisier
  * @date Mai 2012
  */
class BonusEquipement
{
public:
    /** Constructeur.
      * Initialise les deux membres, la version par défaut crée une instance
      * ne donnant aucun bonus.
      *
      * @param[in] car caractéristique améliorée.
      * @param[in] bonus augmentation (1 ou 2).
      * @param[in] prix prix de l'objet.
      * @param[in] permanent \e true si l'équipement est permanent.
      */
    BonusEquipement( const EnumCaracteristique& car = CarSadisme,
                     const unsigned& bonus = 0u,
                     const unsigned& prix = 0u,
                     const bool& permanent = false );
    /** Constructeur de copie.
      * Permet de dupliquer une instance de \c %BonusEquipement.
      *
      * @param[in] bonus instance à copier.
      */
    BonusEquipement( const BonusEquipement& bonus );
    /** Destructeur.
      * Le destructeur ne fait rien de spécial.
      */
    virtual ~BonusEquipement();
    /** Permet d'accéder à Caracteristique.
      *
      * @return une référence constante sur Caracteristique.
      */
    const EnumCaracteristique& caracteristique() const;
    /** Permet d'accéder à ValeurBonus.
      *
      * @return une référence constante sur ValeurBonus.
      */
    const unsigned& valeurBonus() const;
    /** Permet d'accéder à Permanent.
      *
      * @return une référence constante sur Permanent.
      */
    const bool& permanent() const;
    /** Permet d'accéder à Prix.
      *
      * @return une référence constante sur Prix.
      */
    const unsigned& prix() const;
    /** Méthode qui permet d'afficher les informations des membres dans
      * qDebug;
      */
    void affiche() const;
protected:
    /** Type de la caractéristique du monstre qui est améliorée.
      */
    EnumCaracteristique Caracteristique;
    /** Valeur de l'amélioration, +1 ou +2.
      */
    unsigned ValeurBonus;
    /** Contient \e true si l'équipement est permanent, ou \e false s'il
      * ne dure que jusqu'à la prochaine action.
      */
    bool Permanent;
    /** Contient le coût de l'objet.
      */
    unsigned Prix;
};


};

#endif // BONUSEQUIPEMENT_HPP
